package 剑指II;

/**
 * @description:
 * @author: 小白白
 * @create: 2021-11-05
 **/

public class Jz020回文子字符串的个数 {

    /**
     * 给定一个字符串 s ，请计算这个字符串中有多少个回文子字符串。
     * 具有不同开始位置或结束位置的子串，即使是由相同的字符组成，也会被视作不同的子串。
     * <p>
     * 示例 1：
     * 输入：s = "abc"
     * 输出：3
     * 解释：三个回文子串: "a", "b", "c"
     * 示例 2：
     * 输入：s = "aaa"
     * 输出：6
     * 解释：6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
     *  
     * 提示：
     * 1 <= s.length <= 1000
     * s 由小写英文字母组成
     */

    private int result = 0;

    public int countSubstrings(String s) {
        for (int i = 0; i < s.length(); i++) {
            this.valid(s, i);
        }
        return this.result;
    }

    private void valid(String s, int index) {
        int left = index;
        int right = index;
        while (left >= 0 && right < s.length()) {
            char lC1 = s.charAt(left--);
            char rC1 = s.charAt(right++);
            if (lC1 != rC1) {
                break;
            }
            this.result++;
        }
        left = index;
        right = index + 1;
        while (left >= 0 && right < s.length()) {
            char lC = s.charAt(left--);
            char rC = s.charAt(right++);
            if (lC != rC) {
                break;
            }
            this.result++;
        }
    }

    public static void main(String[] args) {
        Jz020回文子字符串的个数 n = new Jz020回文子字符串的个数();
        int result = n.countSubstrings("aba");
        System.out.println(result);
    }

}
